语法
声明函数指针的语法
int *funcPtr(int, int)

计算机只能理解二进制形式,这是一种低级语言。由于我们编写的 C++ 代码总是用高级语言编写的,因此编译器用于将其翻译成二进制代码。编译器是一个主要将源代码转换为可执行代码的程序。此可执行文件存储在内存 (RAM) 中。main() 方法是 CPU 开始执行的地方。它读取当前在 RAM 中而不是在原始文件中的副本。
所有机器代码指令和函数都是数据。此数据由许多字节组成,每个字节都有一个 RAM 地址。函数指针中的 RAM 地址位于函数的初始指令处。
我们可以快速获取函数的地址。为此,我们不必调用函数,我们只需指定其名称。
让我们通过一个简单的例子来理解这个概念
#include <iostream>
using namespace std;
int main() {
cout << "Address of a main() function is: " << &main << endl;
return 0;
}
输出
Address of a main() function is: 1
程序的运行
我们可以通过提供函数指针的名称来使用函数指针调用函数。
通过函数指针调用函数所使用的语法将与我们直接或正常调用函数时相同。
示例:使用函数指针编写一个 C++ 程序来打印总和。
#include <iostream>
using namespace std;
int sum(int a, int b) {
return a + b;
}
int main() {
int(*funcPtr)(int,int); // function pointer is declared
funcPtr = sum; // funcPtr is pointing towards the sum function
int sum = funcPtr (2, 4);
cout << "Then the value of sum is: " << sum << endl;
return 0;
}
输出
Then the value of sum is: 6
函数指针在上述程序中被声明为 int (*funcptr)(int,int),然后将 add() 函数的地址存储在 funcptr 中。这表明 add() 函数的地址在 funcptr 中。
现在,我们可以使用 funcptr 来调用 add() 函数。add() 函数由表达式 funcptr(2,4) 调用,输出保存在 sum 变量中。
为此,让我们编写一个 C++ 程序来使用函数指针打印名称。
我们使用 static_cast 运算符来输出 void 指针的内容。它将指针的数据类型从其原始的 void* 类型更改为它所存储的地址的类型。
#include <iostream>
using namespace std;
void printname(char *name)
{
std::cout << "Name is :" <<name<< std::endl;
}
int main()
{
char s[20]; //the array declaration
void (*ptr)(char*); // function pointer declaration
ptr=printname; // storing the address of printname in ptr.
std::cout << "Please enter the name of the person: " << std::endl;
cin>>s;
cout<<s;
ptr(s); // calling the printname() function
return 0;
}
输出
Please enter the name of the person: Lali Name is Lali
函数 printname(),其参数为 char 指针,在上述程序中定义。函数指针声明为 void (*ptr)(char*)。要将 printname() 函数的地址赋给 ptr,请使用语法 ptr=printname。现在,我们可以使用 ptr 语句 (s) 调用 printname() 函数。
如这里所示,我们可以将函数指针作为参数传递给我们的程序。
#include <iostream>
using namespace std;
void function1()
{
cout<<" The function1 is called";
}
void function2(void (*funcptr)())
{
funcptr();
}
int main()
{
function2(function1);
return 0;
}
输出
The function1 is called
在前面的程序中,我们给函数2() 函数传递了一个函数指针作为参数。main() 方法给 func2() 函数传递了 function1() 的地址。这样,function2() 函数间接调用了 function1() 函数。
本文涵盖了函数指针。我们已经看到了函数指针的价值、它们的使用位置以及它们如何使我们的程序更容易设计和维护。